package marina;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

import marina.model.SungJuk2VO;

public class J19ArrayList {

	public static void main(String[] args) {
		// ArrayList
		// 실무에서 빈번하게 사용되는 컬렉션 객체 중 하나.
		// 배열과 달리 입력하는 데이터 갯수에 따라 크기가 가변(유동적)으로 변함.
		// 동일한 값을 여러개 저장할 수 있고, 입력되는 값들은 순서를 가짐

		// 선언 및 정의
		ArrayList<String> woman = new ArrayList<>();
		ArrayList<SungJuk2VO> sj = new ArrayList<>(); // 중요!!

		// 추가하기 - add
		woman.add("문희");
		woman.add("소연");
		woman.add("마리나");

		sj.add(new SungJuk2VO("안경선배", 100, 98, 89));
		sj.add(new SungJuk2VO("강백호", 89, 65, 37));
		sj.add(new SungJuk2VO("고릴라", 100, 99, 97));

		// 하나씩 조회 - get(위치)
		System.out.println(woman.get(0));
		System.out.println(woman.get(1));
		System.out.println(woman.get(2));

		// SungJukVO의 toString()에 의해 출력
		System.out.println(sj.get(0));
		System.out.println(sj.get(1));
		System.out.println(sj.get(2));
		// SungJukVO의 위치에서 가져올 값을 직접 명시하여 출력
		System.out.println(sj.get(0).getName());
		System.out.println(sj.get(1).getKor());
		System.out.println(sj.get(2).getMat());

		// 몽땅 출력(for-each문 사용)
		// ArrayList<a> b = new ArrayList<>();
		// for(a ??: b){}
		// for(요소 유형 요소명 : arraylist 객체명)
		for (String str : woman) {
			System.out.println(str);
		}
		for (SungJuk2VO s : sj) {
			System.out.println(s);
		}
		// 수정하기 - set(위치, 값)
		woman.set(1, "수지");
		System.out.println(woman.get(1));

		SungJuk2VO newOne = new SungJuk2VO("수정", 78, 32, 45);
		System.out.println(sj.get(2).getName());
		sj.set(2, newOne);
		System.out.println(sj.get(2).getName());

		// 삭제하기 - remove(위치)
		woman.remove(1);
		sj.remove(2);
		for (String str : woman) {
			System.out.println(str);
		}
		for (SungJuk2VO s : sj) {
			System.out.println(s);
		}

		// 포함 여부 확인 - contains/indexOf
		String key = "문희";
		if (woman.contains(key)) {
			System.out.println("데이터가 존재합니다.");
			System.out.println("위치는 " + woman.indexOf(key));
		} else {
			System.out.println("데이터가 엄슴.");
		}
		key = "강백호";
		/*
			if (sj.get(0).getName().contains(key)) {
				System.out.println("찾았어요!");
			} else {
				System.out.println("못 찾았어요!");
			}
		*/
		for (SungJuk2VO s : sj) {
			if (s.getName().contains(key)) {
				System.out.println("찾았어요!");
				System.out.println("위치는 " + sj.indexOf(key));
			} else {
				System.out.println("못 찾았어요!");
			}
		}
		// 정렬하기 - sort
		//객체를 대상으로 정렬하려면 Comparator라는 인터페이스를 구현하고 Collections.sort(대상, 정렬 기준);으로 호출해서 사용.
		Collections.sort(woman);
		for (String str : woman) {
			System.out.println(str);
		}
		Collections.sort(sj, new NameSort());
		for (SungJuk2VO s : sj) {
			System.out.println(s);
		}

		// 모두 삭제 - clear
		woman.clear();
		sj.clear();
		for (String str : woman) {
			System.out.println(str);
		}
		for (SungJuk2VO s : sj) {
			System.out.println(s);
		}

	}// main
}// class

class NameSort implements Comparator<SungJuk2VO> {
	@Override
	public int compare(SungJuk2VO o1, SungJuk2VO o2) {
		return o1.getName().compareTo(o2.getName());
	}
}